package com.jcode.skeleton.model;

import java.util.ArrayList;
import java.util.List;

/**
 * 
 *
 * @Author dreajay
 * @DateTime 2017年3月11日 下午1:50:08
 *
 */
public class Page {
	/** 总记录数 */
	private int totalRows;
	/** 行记录数 */
	private int rowNo;
	/** 总页数 */
	private int totalPages;
	/** 当前页 */
	private int pageNo = 1;
	/** 每页记录数 */
	private int pageSize;
	/** 数据 */
	private List<?> list;

	/**
	private boolean hasPrevious;
	
	private boolean hasNext;
	*/
	
	/** 默认每页记录数20条 */
	public static final int default_pageSize = 10;

	public Page() {
		this(1, default_pageSize, 0);
	}
	
	public Page(int pageNo) {
		this(pageNo, default_pageSize, 0);
	}

	public Page(int pageNo, int pageSize) {
		this(pageNo, pageSize, 0);
	}

	/**
	 * 
	 * @param pageNo
	 * @param pageSize
	 * @param totalRows
	 */
	public Page(int pageNo, int pageSize, int totalRows) {
		this(pageNo, pageSize, totalRows, new ArrayList<Object>());
	}

	/**
	 * 
	 * @param pageNo
	 * @param pageSize
	 * @param totalRows
	 * @param list
	 */
	public Page(int pageNo, int pageSize, int totalRows, List<?> list) {
		setPageNo(pageNo);
		setPageSize(pageSize);
		setTotalRows(totalRows);
		this.list = list;
	}

	/**
	 * 获取当前页
	 * 
	 */
	public int getPageNo() {
		return pageNo;
	}

	/**
	 * 设置当前页，goto Page
	 * 
	 * @param pageNo
	 */
	public void setPageNo(int pageNo) {
		if (pageNo <= 1) {
			this.pageNo = 1;
		} else if (pageNo >= totalPages && totalPages != 0) {
			this.pageNo = totalPages;
		} else {
			this.pageNo = pageNo;
		}
		setRowNo(pageNo <= 1 ? 0 : (pageNo - 1) * (pageSize));
	}

	/**
	 * 获取每页记录数
	 * 
	 * @return
	 */
	public int getPageSize() {
		return pageSize;
	}

	/**
	 * 
	 * @param pageSize
	 */
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
		setRowNo(pageNo <= 1 ? 0 : (pageNo - 1) * (pageSize));
	}

	/**
	 * 获取总页数
	 * 
	 * @return
	 */
	public int getTotalPages() {
		return totalPages;
	}

	/**
	 * 获取总记录数
	 * 
	 * @return
	 */
	public int getTotalRows() {
		return totalRows;
	}

	public void setTotalRows(int totalRows) {
		this.totalRows = totalRows;
		this.totalPages = totalRows % pageSize == 0 ? totalRows / pageSize : totalRows / pageSize + 1; // 无法整除，需加1页
	}

	/**
	 * 获取当前记录数
	 * 
	 * @return
	 */
	public int getRowNo() {
		return rowNo;
	}

	public void setRowNo(int rowNo) {
		this.rowNo = rowNo;
	}

	/**
	 * 第一页
	 */
	public void first() {
		setPageNo(1);
	}

	/**
	 * 上一页
	 */
	public void previous() {
		setPageNo(pageNo--);
	}

	/**
	 * 下一页
	 */
	public void next() {
		setPageNo(pageNo++);
	}

	/**
	 * 最后一页
	 */
	public void last() {
		setPageNo(totalPages);
	}

	/**
	 * 是否有上一页
	 * 
	 * @return
	 */
	public boolean isHasPrevious() {
//		hasPrevious = pageNo <= 1 ? false : true;
		return pageNo > 1;
	}

	/**
	 * 是否有后一页
	 * 
	 * @return
	 */
	public boolean isHasNext() {
//		hasNext = pageNo >= totalPages ? false : true;
		return pageNo >= totalPages;
	}

	@SuppressWarnings("unchecked")
	public <T> List<T> getList() {
		return (List<T>)list;
	}

	public <T> void setList(List<T> list) {
		this.list = list;
	}

	@Override
	public String toString() {
		return "Page [totalRows=" + totalRows + ", rowNo=" + rowNo + ", totalPages=" + totalPages + ", pageNo=" + pageNo + ", pageSize=" + pageSize + ", list=" + list + "]";
	}

	
}